import router from './router'
import store from './store'
import NProgress from 'nprogress' // 进度条
import 'nprogress/nprogress.css' // 进度调样式
// import  getters  from "@/store/getters"
// // 创建白名单的页面
const Whitelist =["/login","/404"]
// // 创建前置守卫
router.beforeEach(async (to, from, next) => {
  // 开启进度条
  NProgress.start()
  // 访问网页时有tok
if(store.getters.token){
  // 在判断访问的是否是登录的页面
  if(to.path === "/login"){
    // 如果访问的是登录页面就跳转到主页
    next("/")
  }else{
    //必须要等待数据获取之后才执行下一个阶段否则如果下个页面需要使用数据如果还来不及获取汇报错
    if(!store.getters.userId){
      // 获取用户信息里面的动态页面 返回值是哟用户的权限系信息
   const {roles}= await store.dispatch("user/getuserInfo")
           // 如果说后续 需要根据用户资料获取数据的话 这里必须改成 同步
        // 筛选用户的可用路由
        // actions中函数 默认是Promise对象 调用这个对象 想要获取返回的值话 必须 加 await或者是then
        // actions是做异步操作的
    //这里是将权限传入方法中筛选 返回值是权限是异步操作
   const routes = await store.dispatch("permission/filterRoutes",roles.menus)
  //  将拥有的权限等于可以跳转的动态路由
    router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
    // 重新跳转
    // / 跳转到 要去的路径 这是一个bug , 如果使用了addRoutes之后, 必须使用next(to.path)来跳转到要去的路径, 不能使用next()
    next(to.path)
    return
    }
 // 如果是其他页面就通行
 next()

  }
}else{
  // 没有token的请框判断是否跳转的白名单页面如果是白名单的页面就准许同行
if(Whitelist.indexOf(to.path) > -1){
  next()
}else{
  next("/login")
}
}  
  // 解决手动跳转进度条不关闭的问题
  NProgress.done()
})
// 创建后置守卫

router.afterEach(()=>{
  // 关闭进度条
  NProgress.done()
})